草庐IT

CountDownLatch和ExecutorService 线程池cachedThreadPool.submit

全部标签

java - 确定哪个线程拥有监视器

有没有办法告诉Java对象,哪个线程(或null)当前拥有它的监视器?或者至少是一种判断当前线程是否拥有它的方法? 最佳答案 我自己找到了一些答案。要测试当前线程是否持有监视器,Thread.holdsLock存在!if(!Thread.holdsLock(data)){thrownewRuntimeException();//complain}这真的很快(亚微秒)并且从1.4开始可用。一般情况下,要测试哪个线程(或线程ID)持有锁,可以使用java.lang.management执行此操作类(感谢@amicngh)。publics

java - 何时在 java 多线程中重置 CyclicBarrier

我正在阅读以下链接中的CyclicBarrierhttp://java-latte.blogspot.in/2013/10/cyclicbarrier-in-java-concurrency.html.在示例1中,CyclicRaceDemo.javamain方法中,CyclicBarrier被重用,没有调用reset方法。我运行了这个例子,它运行良好。所以,我想知道reset方法有什么用。应该什么时候调用?还是我们根本不需要调用它? 最佳答案 CyclicBarrier是循环的,因为它可以在不重置的情况下重复使用。来自Javado

java - 如果线程在同步块(synchronized block)中抛出异常会发生什么

考虑多个线程正在尝试访问临界区,一个线程在同步块(synchronizedblock)内发生异常会发生什么,它具有wait()和notify()来累积和释放锁。 最佳答案 同步监视器将被释放:“如果主体的执行曾经完成,无论是正常还是突然,都会在同一监视器上自动执行解锁操作。”Java语言规范17.1.Synchronization.其他线程将能够继续同步,并调用wait和notify。如果发生异常的线程持有一些关键的程序逻辑资源,您可能需要使用try-finally来确保它被释放。 关于

java - 那些以 "pool"开头的 java 线程是什么?

我的Tomcat服务器出现问题,无法正常关闭。我在发出关闭命令后进行了线程转储,它看起来像这样:http://pastebin.com/7SW4wZN9我认为不允许VM关闭的“可疑”线程是名为“pool-4-thread-1”的线程。其余的是守护线程或内部VM线程。在试图找出这个线程的用途时,我注意到还有其他Java程序创建了具有相似名称的线程(例如,JVisualVM创建了这样的线程)。所以我想知道是否有人知道这个线程是什么以及如何创建它。 最佳答案 这些线程可能是由您在代码中某处(直接或间接通过库)创建的ExecutorServ

java - 编写一个有 2 个线程的程序,交替打印

我最近在面试中被问到这个问题。Writeaprogramwithtwothreads(AandB),whereAprints1,Bprints2andsoonuntil50isreached.我们该怎么做? 最佳答案 赋值的本质是演示一个线程如何向另一个线程发送信号。最常见的方式是使用阻塞队列,但这里一个信号不携带任何信息,所以一个信号量就足够了。创建用2个信号量参数化的线程类:输入和输出:classThreadPrinterimplementsRunnable{intcounter;Semaphoreins,outs;Thread

java - 使用 Executors 服务在 Java 中创建固定大小线程池的最佳方式

我正在使用Java中的Executors框架为多线程应用程序创建线程池,我有一个与性能相关的问题。我有一个可以在实时或非实时模式下工作的应用程序。如果是实时的,我只是使用以下内容:THREAD_POOL=Executors.newCachedThreadPool();但如果不是实时的,我希望能够控制线程池的大小。为此,我正在考虑2个选项,但我不太了解其中的区别,以及哪个会表现更好。选项1是使用简单的方法:THREAD_POOL=Executors.newFixedThreadPool(threadPoolSize);选项2是创建我自己的ThreadPoolExecutor,如下所示:R

java - 最终阻塞在守护线程中

我知道守护线程中的finallyblock不会被执行。但是我一丝不苟的本性试图理解为什么以及在JVM中发生的事情如此特殊以至于它无法调用此block下的代码。我认为它在某种程度上与无法展开的调用堆栈有关,但不知道如何展开。有人可以对此有所了解吗?谢谢。 最佳答案 谁说守护线程中的finallyblock不执行?一般来说,这不是正确的。您可能听说在执行try期间关闭JVM时,不能保证执行finallyblock>(或catch)block。这是正确的(守护线程很容易发生这种情况)。但同样:在正常操作期间,没有什么可以阻止finally

java - 什么时候在 Java 中选择多个进程而不是线程?

出于什么原因,人们会选择多个进程而不是多个线程来用Java实现一个应用程序?我正在重构一个较旧的Java应用程序,该应用程序目前分为几个运行在同一台多核机器上的较小应用程序(进程),它们通过套接字相互通信。我个人认为这应该使用线程而不是进程来完成,但是有什么论点可以为最初的设计辩护呢? 最佳答案 我(和其他人,请参阅下面的归因)可以想到几个原因:历史原因该设计源于只有绿色线可用的时代,原作者/设计师认为它们不适合他。健壮性和容错性您使用的组件不是线程安全的,因此如果不借助多个进程就无法并行化。有些组件存在问题,您不希望它们影响多个进

C++11 Thead线程库的基本使用

文章目录创建线程传递参数等待线程完成分离线程joinable()创建线程要创建线程,我们需要一个可调用的函数或函数对象,作为线程的入口点。在C++11中,我们可以使用函数指针、函数对象或lambda表达式来实现。创建线程的基本语法如下:#include//头文件usingnamespacestd;threadt(function_name,args...);`function_name`是线程入口点的函数或可调用对象`args...`是传递给函数的参数创建线程后,我们可以使用t.join()等待线程完成,或者使用t.detach()分离线程,让它在后台运行。#include#includeus

java - 有没有办法在 Android Studio 中监控线程?

我有一个AndroidJava应用程序,我在AndroidStudio中创建并在三星平板电脑上运行它(根本不使用虚拟设备)。我有三个线程,我相信其中一个可能会陷入某种循环,因为应用程序在某个时候会严重变慢,但不会永远变慢。是否有一些工具可以监控我的应用程序和所有线程的CPU、RAM等使用情况?谢谢 最佳答案 AndroidMonitortools替换为AndroidProfiler,在AndroidStudio3.0:AndroidProfiler-AndroidStudio3.0includesabrandnewsuiteofto